package com.finalcial.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.finalcial.po.LoginMsg;
import com.finalcial.po.UserPersonalMsg;

/**
 * 用户dao层---可实现个人信息界面与登录界面所需要的接口
 * @author Administrator
 *
 */
public interface UserDao {

	/**
	 * 登录界面接口--参数：用户名、密码--返回值：用户id、用户名、密码、角色名、权限id、权限名、权限地址
	 * @param userName 用户名
	 * @param password  用户密码
	 * @return
	 */
	public List<Map<String, Object>> getUserMsg(@Param("userName") String userName, @Param("password")String password);
	
	/**
	 * 管理员-个人信息界面多条件查询接口--参数：用户编号、用户姓名、部门名、职级名、公司名--返回值：用户id、用户姓名、部门id、部门名、职级id、职级名、公司id、公司名、电话、银行号码
	 * @param userId 用户ID
	 * @param userName 用户名
	 * @param departmentName 部门名
	 * @param userTypeName 职级名
	 * @param companyName 公司名
	 * @return
	 */
	public List<Map<String, Object>> getEmployeeInformation(@Param("userId") Integer userId, @Param("userName")String userName, @Param("departmentName")String departmentName, @Param("userTypeName")String userTypeName, @Param("conpanyName")String companyName);
	
	/**
	 * 管理员-个人信息界面显示接口--返回值：用户id、用户姓名、部门id、部门名、职级id、职级名、公司id、公司名、电话、银行号码
	 * @return
	 */
	public List<Map<String, Object>> listEmployeeInformation(@Param(value="startPos") Integer startPos, @Param(value="pageSize") Integer pageSize);
	
	/**
	 * 管理员--个人信息界面删除接口-- 参数：用户id--返回值：删除条数
	 * @param userId 用户ID
	 * @return
	 */
	public Integer deleteEmployeeInformation(@Param("userId")Integer userId);
	
	/**
	 * 管理员--个人信息界面修改接口--参数：用户id,部门id、职级id、公司id、电话、银行卡、银行卡类型、密码--返回值：修改条数
	 * @param departmentId 部门ID
	 * @param userTypeId 职级ID
	 * @param companyId 公司ID
	 * @param phone 电话
	 * @param bankNumber 银行卡编号
	 * @param bankName 银行卡类型
	 * @param password 密码
	 * @return
	 */
	public Integer updateEmployeeInformation(@Param("userId") Integer userId,@Param("departmentId")Integer departmentId, @Param("userTypeId")Integer userTypeId, @Param("companyId")Integer companyId, @Param("phone")String phone, @Param("bankNumber")String bankNumber, @Param("bankName")String bankName, @Param("password")String password);
	
	/**
	 * 根据所属部门名找到所属部门id--参数：部门名--返回值：部门id
	 * @param departmentName 部门名
	 * @return
	 */
	public Integer getDeptId(@Param("departmentName")String departmentName);
	
	/**
	 * 根据公司名找到公司id--参数：公司名--返回值：公司id
	 * @param companyName 公司名
	 * @return
	 */
	public Integer getCompanyId(@Param("companyName")String companyName);
	
	/**
	 * 根据职级名找职级id--参数：职级名--返回值：职级id
	 * @param userTypeName 职级名
	 * @return
	 */
	public Integer getUserTypeId(@Param("userTypeName")String userTypeName);
	
	/**
	 * 管理员--个人信息界面新增接口--参数：用户名、部门id、职级id、公司id、电话、银行卡、银行卡类型、密码--返回值：新增条数
	 * @param userName 用户名
	 * @param departmentId 部门ID
	 * @param userTypeId 职级ID
	 * @param companyId 公司ID
	 * @param phone 电话
	 * @param bankNumber 银行卡编号
	 * @param bankName 银行卡类型
	 * @param password 密码
	 * @return
	 */
	public Integer insertEmployeeInformation(@Param("userName")String userName, @Param("departmentId")Integer departmentId, @Param("userTypeId")Integer userTypeId, @Param("companyId")Integer companyId, @Param("phone")String phone, @Param("bankNumber")String bankNumber, @Param("bankName")String bankName, @Param("password")String password);
	
	/**
	 * 非管理员--个人信息界面显示接口--参数：用户id--返回值：用户id、用户姓名、部门id、部门名、职级id、职级名、公司id、公司名、电话、银行号码
	 * @param userId 用户ID
	 * @return
	 */
	public UserPersonalMsg getEmployeeInformationByOrdinary(@Param("userId")Integer userId);
	/**
	 * 查询用户总数量
	 * @return
	 */
	public Integer getUserCounts();
	/**
	 * 个人用户界面--修改用户密码
	 * @param userId 用户ID
	 * @param password 用户密码
	 * @return
	 */
	public Integer updateUserInfoOne(@Param("userId") Integer userId, @Param("password") String password);

	/**
	 * 存入session的内容
	 * @param userName
	 * @param password
	 * @return
	 */
	public LoginMsg getLoginMsg(@Param("userName") String userName, @Param("password")String password);
	/**
	 * 通过用户id,权限父节点查询用户的权限
	 * @param userId 用户ID
	 * @param parent 权限父节点ID
	 * @return
	 */
	public List<Map<String,Object>> getFunctionByUserId(@Param("userId") Integer userId,@Param("parent") Integer parent);
}
